Passed
Pull Request — master (#188)
by Mathieu
02:03
created

CreateProjectAction   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 24
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 23
dl 0
loc 24
rs 10
c 0
b 0
f 0
wmc 2

1 Function

Rating   Name   Duplication   Size   Complexity  
A index 0 14 2
1
import {
2
  Body,
3
  Post,
4
  Controller,
5
  Inject,
6
  BadRequestException,
7
  UseGuards
8
} from '@nestjs/common';
9
import { AuthGuard } from '@nestjs/passport';
10
import { ApiTags, ApiBearerAuth, ApiOperation } from '@nestjs/swagger';
11
import { ICommandBus } from 'src/Application/ICommandBus';
12
import { CreateProjectCommand } from 'src/Application/Project/Command/CreateProjectCommand';
13
import { ProjectDTO } from '../DTO/ProjectDTO';
14
import { Roles } from 'src/Infrastructure/HumanResource/User/Decorator/Roles';
15
import { UserRole } from 'src/Domain/HumanResource/User/User.entity';
16
import { RolesGuard } from 'src/Infrastructure/HumanResource/User/Security/RolesGuard';
17
18
@Controller('projects')
19
@ApiTags('Project')
20
@ApiBearerAuth()
21
@UseGuards(AuthGuard('bearer'), RolesGuard)
22
export class CreateProjectAction {
23
  constructor(
24
    @Inject('ICommandBus')
25
    private readonly commandBus: ICommandBus
26
  ) {}
27
28
  @Post()
29
  @Roles(UserRole.COOPERATOR, UserRole.EMPLOYEE)
30
  @ApiOperation({summary: 'Create new project'})
31
  public async index(@Body() projectDto: ProjectDTO) {
32
    try {
33
      const { name, customerId, dayDuration, invoiceUnit } = projectDto;
34
      const id = await this.commandBus.execute(
35
        new CreateProjectCommand(name, dayDuration, invoiceUnit, customerId)
36
      );
37
38
      return {id};
39
    } catch (e) {
40
      throw new BadRequestException(e.message);
41
    }
42
  }
43
}
44